gtk4.git
5 years agolistitemfactory: Make the builder factory properly buildable
Benjamin Otte [Fri, 18 Oct 2019 02:07:04 +0000 (04:07 +0200)]
listitemfactory: Make the builder factory properly buildable

Turn the construct arguments into construct properties so that they can
be set from ui files.

5 years agolistview: Add move keybindings
Benjamin Otte [Wed, 16 Oct 2019 19:31:50 +0000 (21:31 +0200)]
listview: Add move keybindings

My god, these are a lot.

And my god, these are complicated to get right.

5 years agolistview: Add gtk_list_view_get_position_at_y()
Benjamin Otte [Wed, 16 Oct 2019 19:31:00 +0000 (21:31 +0200)]
listview: Add gtk_list_view_get_position_at_y()

5 years agolistitem: Add "listitem.select" action and keybindings for it
Benjamin Otte [Wed, 16 Oct 2019 14:28:47 +0000 (16:28 +0200)]
listitem: Add "listitem.select" action and keybindings for it

In fact, grab space with all modifiers to toggle selection of the
current item.

5 years agolistview: Add a focus tracker
Benjamin Otte [Wed, 16 Oct 2019 12:57:39 +0000 (14:57 +0200)]
listview: Add a focus tracker

This ensures that the row with the input focus always stays available,
even when scrolled out of view.

5 years agolistview: Implement (un)select all
Benjamin Otte [Tue, 15 Oct 2019 23:59:01 +0000 (01:59 +0200)]
listview: Implement (un)select all

Adds listitem.select-all and listitem.unselect-all actions and installs
the same keybindings as the treeview for those actions.

5 years agolistview: Track focus movements and update selection
Benjamin Otte [Tue, 15 Oct 2019 21:45:33 +0000 (23:45 +0200)]
listview: Track focus movements and update selection

When focus moves via tab/arrow, we need to select the new item.

5 years agolistview: Implement activation
Benjamin Otte [Tue, 15 Oct 2019 21:06:36 +0000 (23:06 +0200)]
listview: Implement activation

- a GtkListview::activate signal
- a GtkListItem::activatable property
- activate list items on double clicks and <Enter> presses

5 years agotreeexpander: Implement input support
Benjamin Otte [Tue, 15 Oct 2019 04:07:26 +0000 (06:07 +0200)]
treeexpander: Implement input support

This implements all the keybindings from GtkTreeView that can be
supported.

It does not implement expand-all, because supporting that means
causing the TreeListModel to emit lots of create_model vfuncs which in
turn would cause many items-changed signal which in turn would cause
many signal handlers to run which in turn would make "expand-all" very
reentrant, and I'm uneasy about supporting that.

For the mouse, just add a click gesture to the expander icon that toggles
expanded state.

5 years agolistitem: Change focus handling
Benjamin Otte [Tue, 15 Oct 2019 02:18:10 +0000 (04:18 +0200)]
listitem: Change focus handling

Focus in the listitem now works like this:
1. If any child can take focus, do not ever attempt
   to take focus.
2. Otherwise, if this item is selectable or activatable,
   allow focusing this widget.

This makes sure every item in a list is focusable for
activation and selection handling, but no useless widgets
get focused and moving focus is as fast as possible.

5 years agoinspector: Make the recorder node list use a ListView
Benjamin Otte [Mon, 14 Oct 2019 04:50:40 +0000 (06:50 +0200)]
inspector: Make the recorder node list use a ListView

It's quite a bit faster now, but the code is also a bit more awkward.

Pain points:

- GtkTreeListModel cannot be created in UI files because it needs
  a CreateModelFunc.
  Using a signal for this doesn't work because autoexpand wants to
  expand the model before the signal handler is connected.

- The list item factory usage is still awkward. It's bearable here
  because the list items are very simple, but still.

5 years agoinspector: Use a GtkTreeExpander in the object tree
Benjamin Otte [Mon, 14 Oct 2019 04:22:41 +0000 (06:22 +0200)]
inspector: Use a GtkTreeExpander in the object tree

5 years agoinspector: Use a treeexpander in the recorder
Benjamin Otte [Mon, 14 Oct 2019 04:18:25 +0000 (06:18 +0200)]
inspector: Use a treeexpander in the recorder

5 years agodemo: Add a GSettings tree demo
Benjamin Otte [Sun, 13 Oct 2019 05:40:58 +0000 (07:40 +0200)]
demo: Add a GSettings tree demo

It is meant to look somewhat like dconf-editor when it is done.

So far, it's just a list.

5 years agoAdd GtkTreeExpander
Benjamin Otte [Mon, 14 Oct 2019 02:31:20 +0000 (04:31 +0200)]
Add GtkTreeExpander

This is a container widget that takes over all the duties of tree
expanding and collapsing.
It has to be a container so it can capture keybindings while focus is
inside the listitem.

So far, this widget does not allow interacting with it, but it shows the
expander arrow in its correct state.

Also, testlistview uses this widget now instead of implementing
expanding itself.

5 years agogridview: Actually do something
Benjamin Otte [Sat, 12 Oct 2019 20:53:13 +0000 (22:53 +0200)]
gridview: Actually do something

Implement measuring and allocating items - which makes the items appear
when drawing and allows interacting with the items.

However, the gridview still does not allow any user interaction
(including scrolling).

5 years agolistview: Pass the CSS name of listitems to the manager
Benjamin Otte [Sat, 12 Oct 2019 11:16:54 +0000 (13:16 +0200)]
listview: Pass the CSS name of listitems to the manager

... instead of hardcoding "row".

5 years agogridview: Implement GtkOrientable
Benjamin Otte [Thu, 10 Oct 2019 03:24:29 +0000 (05:24 +0200)]
gridview: Implement GtkOrientable

Again, this is just the skeleton, because the Gridview does nothing yet.

5 years agogridview: Add factory handling
Benjamin Otte [Thu, 10 Oct 2019 01:38:51 +0000 (03:38 +0200)]
gridview: Add factory handling

Just copy the listview APIs.

Code still doesn't do anything with it.

5 years agolistview: Expose GtkListItemFactory APIs
Benjamin Otte [Tue, 8 Oct 2019 22:07:07 +0000 (00:07 +0200)]
listview: Expose GtkListItemFactory APIs

Due to the many different ways to set factories, it makes sense to
expose them as custom objects.

This makes the actual APIs for the list widgets simpler, because they
can just have a regular "factory" property.

As a convenience function, gtk_list_view_new_with_factory() was added
to make this whole approach easy to use from C.

5 years agogtk-demo: Add a rough start at a Weather demo
Benjamin Otte [Mon, 7 Oct 2019 02:46:11 +0000 (04:46 +0200)]
gtk-demo: Add a rough start at a Weather demo

This demos a horizontal listview.

5 years agolistview: Implement GtkOrientable
Benjamin Otte [Sun, 6 Oct 2019 03:46:50 +0000 (05:46 +0200)]
listview: Implement GtkOrientable

5 years agotests: Add a rough form of multiselection
Benjamin Otte [Sun, 6 Oct 2019 02:17:14 +0000 (04:17 +0200)]
tests: Add a rough form of multiselection

Just store a "filechooser::selected" attribute in the GFileInfo if
the file is meant to be selected.

5 years agolistview: Implement extending selections
Benjamin Otte [Sun, 6 Oct 2019 02:10:09 +0000 (04:10 +0200)]
listview: Implement extending selections

Shift-clicking to extend selections now also works, imitating the
behavior of normal clicking and Windows Explorer (but not treeview):

1. We track the last selected item (normally, not via extend-clicking).

2. When shift-selecting, we modify the range from the last selected item
   to this item the same way we modify the regular item when not using
   shift:

2a. If Ctrl is not pressed, we select the range and unselect everything
    else.

2b. If Ctrl is pressed, we make the range have the same selection state
    as the last selected item:
    - If the last selected item is selected, select the range.
    - If the last selected item is not selected, unselect the range.

5 years agolistview: Add list.scroll_to_item action
Benjamin Otte [Fri, 4 Oct 2019 04:50:47 +0000 (06:50 +0200)]
listview: Add list.scroll_to_item action

The action scrolls the given item into view.

Listitems activate this action when they gain focus.

5 years agotestlistview: Load icons async
Benjamin Otte [Thu, 3 Oct 2019 04:50:51 +0000 (06:50 +0200)]
testlistview: Load icons async

Speeds up loading by 4x, because out of view icons aren't loaded
anymore.

5 years agotestlistview: Port to directory list
Benjamin Otte [Mon, 25 Nov 2019 07:26:55 +0000 (08:26 +0100)]
testlistview: Port to directory list

5 years agolistitemfactory: Add a factory for ui files
Benjamin Otte [Mon, 10 Jun 2019 02:58:45 +0000 (04:58 +0200)]
listitemfactory: Add a factory for ui files

Reuse <template> magic to initialize GtkListItems. This feels
amazingly hacky, but it also amazingly worked on the first try.

5 years agolistitemfactory: Split implementation out
Benjamin Otte [Mon, 10 Jun 2019 01:43:52 +0000 (03:43 +0200)]
listitemfactory: Split implementation out

.. into gtkfunctionslistitemfactory.c

Now we can add a different implmenetation.

5 years agolistitemfactory: vfuncify
Benjamin Otte [Sun, 9 Jun 2019 22:17:44 +0000 (00:17 +0200)]
listitemfactory: vfuncify

No functional changes other than a new indirection.

5 years agolistitemfactory: Sanitize APIs
Benjamin Otte [Sun, 9 Jun 2019 20:50:46 +0000 (22:50 +0200)]
listitemfactory: Sanitize APIs

Make sure the APIs follow a predictable path:

setup
  bind
    rebind/update (0-N times)
  unbind
teardown

This is the first step towards providing multiple different factories.

5 years agolistview: Add gtk_list_view_set_show_separators()
Benjamin Otte [Tue, 4 Jun 2019 01:01:15 +0000 (03:01 +0200)]
listview: Add gtk_list_view_set_show_separators()

Do the same thing that GtkListBox does in commit
0249bd4f8a03ec473f3ca9d4324a3a8b75bd3f44

5 years agolistitemmanager: Add trackers
Benjamin Otte [Wed, 27 Feb 2019 07:45:28 +0000 (08:45 +0100)]
listitemmanager: Add trackers

... and replace the anchor tracking with a tracker.

Trackers track an item through the list across changes and ensure that
this item (and potentially siblings before/after it) are always backed
by a GtkListItem and that if the item gets removed a replacement gets
chosen.

This is now used for tracking the anchor but can also be used to add
trackers for the cursor later.

5 years agolistitemmanager: Simplify
Benjamin Otte [Fri, 22 Feb 2019 02:05:54 +0000 (03:05 +0100)]
listitemmanager: Simplify

Remove a bunch of API from the headers that isn't used anymore and then
refactor code to not call it anymore.

In particular, get rid of GtkListItemManagerChange and replace it with a
GHashTable.

5 years agogridview: Implement GtkScrollable
Benjamin Otte [Wed, 6 Feb 2019 20:18:33 +0000 (21:18 +0100)]
gridview: Implement GtkScrollable

We can now scroll all the nothing we display.

We also clip it properly.

5 years agolistitemmanager: Move list of listitems here
Benjamin Otte [Wed, 6 Feb 2019 19:48:08 +0000 (20:48 +0100)]
listitemmanager: Move list of listitems here

All the listview infrastructure moved with it, so the next step is
moving that back...

5 years agogridview: Add API for setting number of columns
Benjamin Otte [Mon, 28 Jan 2019 01:24:34 +0000 (02:24 +0100)]
gridview: Add API for setting number of columns

The API isn't used yet.

5 years agogtk: Add a GtkGridView skeleton
Benjamin Otte [Sun, 27 Jan 2019 19:15:23 +0000 (20:15 +0100)]
gtk: Add a GtkGridView skeleton

5 years agolistitem: Add a press gesture to select the item
Benjamin Otte [Fri, 5 Oct 2018 21:24:18 +0000 (23:24 +0200)]
listitem: Add a press gesture to select the item

This is implemented by using actions, which are a neat trick to get to
allow the ListItem to call functions on the ListView without actually
needing to be aware of it.

5 years agolistview: Add initial support for displaying selections
Benjamin Otte [Wed, 3 Oct 2018 16:53:06 +0000 (18:53 +0200)]
listview: Add initial support for displaying selections

5 years agolistview: Reset listitems' CSS animations when rebinding
Benjamin Otte [Sat, 29 Sep 2018 20:38:09 +0000 (22:38 +0200)]
listview: Reset listitems' CSS animations when rebinding

This way, newly displayed rows don't play an unselect animation (text
fading in) when they are unselected, but the row was previously used for
a selected item.

5 years agolistview: Add selection properties to ListItem
Benjamin Otte [Sat, 29 Sep 2018 20:34:43 +0000 (22:34 +0200)]
listview: Add selection properties to ListItem

This just brings the infrastructure into place, we're not using the
properties yet.

5 years agolistview: Try to keep the list items in order when scrolling
Benjamin Otte [Fri, 28 Sep 2018 01:33:16 +0000 (03:33 +0200)]
listview: Try to keep the list items in order when scrolling

Instead of just destroying all items and then recreating them (or even
hide()ing and then show()ing them again (or even even repositioning
them in the widget tree)), just try to reust them in the order they are.

This works surprisingly well when scrolling and most/all widgets
just moved.

5 years agolistlistmodel: Add gtk_list_list_model_item_moved()
Benjamin Otte [Fri, 28 Sep 2018 00:45:54 +0000 (02:45 +0200)]
listlistmodel: Add gtk_list_list_model_item_moved()

Use it to fix a case that just said g_warning ("oops").

Apparently I had forgotten the case where a container moved a child
in the widget tree.

5 years agolistitemmanager: Switch from "insert_before" to "insert_after" argumnet
Benjamin Otte [Fri, 28 Sep 2018 00:05:46 +0000 (02:05 +0200)]
listitemmanager: Switch from "insert_before" to "insert_after" argumnet

We reorder widgets start to end, so when reusing a list item, we
correctly know the previous sibling for that list item, but not the
next sibling yet. We just know the widget it should ultimately be in
front of.
So we can do a more correct guess of the list item's place in the widget
tree if we think about where to place an item like this.

Actually using this change will come in the next commit.

5 years agotestlistview: Create widgets only once
Benjamin Otte [Wed, 26 Sep 2018 00:18:13 +0000 (02:18 +0200)]
testlistview: Create widgets only once

Previously, we were recreating all widgets every time the list item was
rebound, which caused a lot of extra work every time we scrolled.

Now we keep the widgets around and only set their properties again when
the item changes.

5 years agotestlistview: Show the row number
Benjamin Otte [Tue, 25 Sep 2018 23:41:39 +0000 (01:41 +0200)]
testlistview: Show the row number

Always show the current row. This is mostly useful for debugging, not
for beauty.

5 years agolistview: Only allocate necesary rows
Benjamin Otte [Tue, 25 Sep 2018 23:37:38 +0000 (01:37 +0200)]
listview: Only allocate necesary rows

This is the big one.

The listview only allocates 200 rows around the visible row now.
Everything else is kept in ListRow instances with row->widget == NULL.

For rows without a widget, we assign the median height of the child
widgets as the row's height and then do all calculations as if there
were widgets that had requested that height (like setting adjustment
values or reacting to adjustment value changes).

When the view is scrolled, we bind the 200 rows to the new visible area,
so that the part of the listview that can be seen is always allocated.

5 years agolistview: Change anchor handling again
Benjamin Otte [Mon, 24 Sep 2018 22:16:27 +0000 (00:16 +0200)]
listview: Change anchor handling again

The anchor is now a tuple of { listitem, align }.

Using the actual list item allows keeping the anchor across changes
in position (ie when lists get resorted) while still being able to fall
back to positions (list items store their position) when an item gets
removed.

The align value is in the range [0..1] and defines where in the visible
area to do the alignment.
0.0 means to align the top of the row with the top of the visible area,
1.0 aligns the bottom of the widget with the visible area and 0.5 keeps
the center of the widget at the center of the visible area.
It works conceptually the same as percentages in CSS background-position
(where the background area and the background image's size are matched
the same way) or CSS transform-origin.

5 years agolistview: Change how binding is done
Benjamin Otte [Mon, 24 Sep 2018 02:42:15 +0000 (04:42 +0200)]
listview: Change how binding is done

We now don't let the functions create widgets for the item from the
listmodel, instead we hand out a GtkListItem for them to add a widget
to.

GtkListItems are created in advance and can only be filled in by the
binding code by gtk_container_add()ing a widget.
However, they are GObjects, so they can provide properties that the
binding code can make use of - either via notify signals or GBinding.

5 years agolistitem: Add gtk_list_item_get_position()
Benjamin Otte [Mon, 24 Sep 2018 02:01:37 +0000 (04:01 +0200)]
listitem: Add gtk_list_item_get_position()

Also refactor the whole list item management yet again.

Now, list item APIs doesn't have bind/unbind functions anymore, but only
property setters.

The item factory is the only one doing the binding.
As before, the item manager manages when items need to be bound.

5 years agotests: Make animating listview do random resorts
Benjamin Otte [Sat, 22 Sep 2018 20:14:25 +0000 (22:14 +0200)]
tests: Make animating listview do random resorts

5 years agolistview: Change change management
Benjamin Otte [Sat, 22 Sep 2018 20:11:27 +0000 (22:11 +0200)]
listview: Change change management

Add a GtkListItemManagerChange object that tracks all removed list
rows during an item-changed signal so they can be added back later.

5 years agolistview: Make the listitemmanager stricter
Benjamin Otte [Fri, 21 Sep 2018 03:32:00 +0000 (05:32 +0200)]
listview: Make the listitemmanager stricter

Require that items created with the manager get destroyed via the
manager.

To that purpose, renamed create_list_item() to acquire_list_item() and
add a matching release_list_item() function.

This way, the manager can in the future keep track of all items and
cache information about them.

5 years agolistview: Add GtkListItem
Benjamin Otte [Fri, 21 Sep 2018 03:05:34 +0000 (05:05 +0200)]
listview: Add GtkListItem

GtkListItem is a generic row widget that is supposed to replace
GtkListBoxRow and GtkFlowBoxChild.

5 years agolistview: Add GtkListItemManager
Benjamin Otte [Thu, 20 Sep 2018 03:18:34 +0000 (05:18 +0200)]
listview: Add GtkListItemManager

It's all stubs for now, but here's the basic ideas about what
this object is supposed to do:

(1) It's supposed to be handling all the child GtkWidgets that are
    used by the listview, so that the listview can concern
    itself with how many items it needs and where to put them.
(2) It's meant to do the caching of widgets that are not (currently)
    used.
(3) It's meant to track items that remain in the model across
    items-changed emissions and just change position.
(2) It's code that can be shared between listview and potential
    other widgets like a GridView.

It's also free to assume that the number of items it's supposed to
manage doesn't grow too much, so it's free to use O(N) algorithms.

5 years agolistview: Implement an anchor
Benjamin Otte [Wed, 19 Sep 2018 05:08:30 +0000 (07:08 +0200)]
listview: Implement an anchor

The anchor selection is very basic: just anchor the top row.

That's vastly better than any other widget already though.

5 years agotests: Add a test for a permanently changing listview
Benjamin Otte [Wed, 19 Sep 2018 02:29:33 +0000 (04:29 +0200)]
tests: Add a test for a permanently changing listview

This is mostly for dealing with proper anchoring and can be used to
check that things don't scroll or that selection and focus handling
properly works.

For comparison purposes, a ListBox is provided next to it.

5 years agolistview: Implement GtkScrollable
Benjamin Otte [Tue, 18 Sep 2018 17:58:19 +0000 (19:58 +0200)]
listview: Implement GtkScrollable

Scrolling in a very basic form is also supported

5 years agolistview: Make widget actually do something
Benjamin Otte [Tue, 18 Sep 2018 02:56:19 +0000 (04:56 +0200)]
listview: Make widget actually do something

The thing we're actually doing is create and maintain a widget for every
row. That's it.

Also add a testcase using this. The testcase quickly allocates too many
rows though and then becomes unresponsive though. You have been warned.

5 years agolistview: Introduce GtkListItemFactory
Benjamin Otte [Mon, 17 Sep 2018 05:29:50 +0000 (07:29 +0200)]
listview: Introduce GtkListItemFactory

Thisis the abstraction I intend to use for creating widgets and binding
them to the item out of the listview.

For now this is a very dumb wrapper around the functions that exist in
the API.

But it leaves the freedom to turn this into public API, make an
interface out of it and most of all write different implementations, in
particular one that uses GtkBuilder.

5 years agogtk: Add a GtkListView skeleton
Benjamin Otte [Sun, 16 Sep 2018 18:52:06 +0000 (20:52 +0200)]
gtk: Add a GtkListView skeleton

5 years agobuilder: Add <binding> tag
Benjamin Otte [Mon, 25 Nov 2019 07:15:31 +0000 (08:15 +0100)]
builder: Add <binding> tag

The tag contains an expression that it then gtk_expression_bind()s to
the object it is contained in.

5 years agobuilder: Allow text content in <lookup>
Benjamin Otte [Mon, 25 Nov 2019 07:06:45 +0000 (08:06 +0100)]
builder: Allow text content in <lookup>

  <lookup>foo</lookup>
is now short for
  <lookup>
    <constant>foo</constant>
  </lookup>
ie it looks up the object with the given name so it can then do a
property lookup with it.

This is the most common operation, so it's a nice shortcut.

5 years agobuilder: Allow <constant> without a type
Benjamin Otte [Mon, 25 Nov 2019 07:04:24 +0000 (08:04 +0100)]
builder: Allow <constant> without a type

A constant without a type is assumed to be an object. This is the most
common case and allows
  <constant>foo</constant>
without requiring updates to the type whenever the foo object changes.

5 years agobuilder: Make <lookup> type optional
Benjamin Otte [Mon, 25 Nov 2019 07:01:31 +0000 (08:01 +0100)]
builder: Make <lookup> type optional

If no type is set, use the type of the expression.

5 years agogtk-demo: Make fishbowl info text use bindings
Benjamin Otte [Mon, 25 Nov 2019 06:28:19 +0000 (07:28 +0100)]
gtk-demo: Make fishbowl info text use bindings

It's a good demo for how bindings can format multiple properties into an
informative string with 1 line of code (and 5 lines of XML).

5 years agosorter: Add tests
Matthias Clasen [Thu, 5 Dec 2019 00:18:50 +0000 (19:18 -0500)]
sorter: Add tests

Some basic tests for GtkSorter.

5 years agosortlistmodel: Make sort stable
Benjamin Otte [Wed, 11 Dec 2019 00:22:20 +0000 (01:22 +0100)]
sortlistmodel: Make sort stable

The sort of the sortlistmodel is now stable with respect to the original
list model.

That means that if the sorter compares items as equal, the model
will make sure those items keep the order they were in in the original
model.

Or in other words: The model guarantees a total order based on the
item's position in the original model.

5 years agosortlistmodel: Redo the way we store the items
Benjamin Otte [Wed, 11 Dec 2019 00:11:59 +0000 (01:11 +0100)]
sortlistmodel: Redo the way we store the items

We need to keep this data around for changes in future commits where we
make the sorting stable.

An important part of the new data handling is that the unsorted list
needs to always be dealt with before the sorted list - upon creation we
rely on the unsorted iter and upon destruction, the sorted sequence
frees the entry leaving the unsorted sequence pointer invalid.

This change does not do any behavioral changes.

5 years agoRedo sort list model with GtkSorter
Matthias Clasen [Tue, 3 Dec 2019 04:44:22 +0000 (23:44 -0500)]
Redo sort list model with GtkSorter

Reshuffle the api to take full advantage
of GtkSorter. Update all callers.

5 years agoAdd GtkNumericSorter
Matthias Clasen [Sun, 8 Dec 2019 19:37:20 +0000 (14:37 -0500)]
Add GtkNumericSorter

This sorter compares numbers obtained from items
by evaluating an expression.

5 years agoAdd GtkMultiSorter
Matthias Clasen [Sun, 8 Dec 2019 18:54:57 +0000 (13:54 -0500)]
Add GtkMultiSorter

This is a sorter that tries multiple sorters in turn.

5 years agoAdd GtkStringSorter
Matthias Clasen [Tue, 3 Dec 2019 04:43:14 +0000 (23:43 -0500)]
Add GtkStringSorter

This is a GtkSorter implementation collating strings

5 years agoAdd GtkCustomSorter
Matthias Clasen [Tue, 3 Dec 2019 04:43:14 +0000 (23:43 -0500)]
Add GtkCustomSorter

This is a GtkSorter implementation which uses a GCompareDataFunc.

5 years agoAdd GtkSorter
Matthias Clasen [Tue, 3 Dec 2019 04:43:14 +0000 (23:43 -0500)]
Add GtkSorter

This is a helper object for sorting, similar to GtkFilter.

5 years agoAdd GtkOrdering
Benjamin Otte [Thu, 12 Dec 2019 04:16:31 +0000 (05:16 +0100)]
Add GtkOrdering

This is an enum that we're gonna use soon and it's worth introducing as a
separate commit.

The intention is to have meaningful names for return values in
comparison functions.

5 years agoMore expression tests
Matthias Clasen [Thu, 28 Nov 2019 19:40:34 +0000 (14:40 -0500)]
More expression tests

Test type mismatches, and the this pointer
during evaluation.

5 years agoexpression: Invalidate bindings before destroying them
Benjamin Otte [Tue, 26 Nov 2019 02:57:40 +0000 (03:57 +0100)]
expression: Invalidate bindings before destroying them

Use a weak ref to invalidate bindings. Make sure that this happens
before creating any watches, so that notifies from the
watched expression about changes will not trigger set_property() calls
during dispose()/finalize().

Invalidating also ensures that the watches aren't removed, which can
trigger warnings if the watches are watching the object itself, and the
weak refs cannot be removed anymore.

5 years agoexpression: Add gtk_expression_bind()
Benjamin Otte [Sun, 24 Nov 2019 07:05:41 +0000 (08:05 +0100)]
expression: Add gtk_expression_bind()

Add a simple way to bind expressions to object properties. This is
essentially the thing to replace g_object_bind_property().

5 years agotestsuite: Add expression tests
Benjamin Otte [Thu, 21 Nov 2019 05:02:56 +0000 (06:02 +0100)]
testsuite: Add expression tests

5 years agoexpression: Add the ability to watch an expression
Benjamin Otte [Thu, 21 Nov 2019 04:53:56 +0000 (05:53 +0100)]
expression: Add the ability to watch an expression

5 years agobuilder: Add support for parsing expressions
Benjamin Otte [Mon, 18 Nov 2019 03:35:36 +0000 (04:35 +0100)]
builder: Add support for parsing expressions

5 years agofilter: Add tests
Benjamin Otte [Wed, 11 Dec 2019 20:26:43 +0000 (21:26 +0100)]
filter: Add tests

Some basic tests for GtkFilter

5 years agoAdd GtkMultiFilter, GtkAnyFilter, GtkEveryFilter
Benjamin Otte [Wed, 11 Dec 2019 20:28:38 +0000 (21:28 +0100)]
Add GtkMultiFilter, GtkAnyFilter, GtkEveryFilter

GtkMultiFilter is the abstract base class for managing multiple child
filter.
GtkAnyFilter and GtkEveryFilter are the actual implementations.

5 years agofilter: Add GtkStringFilter
Benjamin Otte [Sat, 16 Nov 2019 21:15:51 +0000 (22:15 +0100)]
filter: Add GtkStringFilter

Users provide a search filter and an expression that evaluates the items
to a string and then the filter goes and matches those strings to the
search term.

5 years agoexpression: Add GtkObjectExpression
Benjamin Otte [Tue, 26 Nov 2019 17:59:34 +0000 (18:59 +0100)]
expression: Add GtkObjectExpression

Weak refs break cycles...

5 years agoAdd GtkExpression
Benjamin Otte [Sat, 16 Nov 2019 20:52:18 +0000 (21:52 +0100)]
Add GtkExpression

GtkExpressions allow looking up values from objects.

There are a few simple expressions, but the main one is the closure
expression that just calls a user-provided closure.

5 years agofilterlistmodel: Rewrite to use GtkFilter
Benjamin Otte [Sun, 10 Nov 2019 01:39:31 +0000 (02:39 +0100)]
filterlistmodel: Rewrite to use GtkFilter

5 years agotests: Remove testtreemodel test
Benjamin Otte [Sun, 10 Nov 2019 01:13:41 +0000 (02:13 +0100)]
tests: Remove testtreemodel test

testlistview does everything this test does.

5 years agoAdd GtkCustomFilter
Benjamin Otte [Sun, 10 Nov 2019 00:30:02 +0000 (01:30 +0100)]
Add GtkCustomFilter

5 years agoAdd GtkFilter
Benjamin Otte [Sat, 9 Nov 2019 01:55:48 +0000 (02:55 +0100)]
Add GtkFilter

5 years agoAdd GtkDirectoryList
Benjamin Otte [Wed, 2 Oct 2019 03:38:11 +0000 (05:38 +0200)]
Add GtkDirectoryList

Adds a new listmodel called GtkDirectoryList that lists the children of
a GFile as GFileInfos.

This is supposed to be used by the filechooser.

5 years agoeventcontrollermotion: Remove mode argument
Benjamin Otte [Sun, 24 May 2020 15:47:53 +0000 (17:47 +0200)]
eventcontrollermotion: Remove mode argument

It's not used and nobody has documented how it's meant to work anyway.

5 years agoMerge branch 'fix-pango-deps' into 'master'
Matthias Clasen [Sat, 30 May 2020 16:29:12 +0000 (16:29 +0000)]
Merge branch 'fix-pango-deps' into 'master'

Fix inconsistencies in our pango deps

See merge request GNOME/gtk!1989

5 years agoMerge branch 'matthiasc/for-master' into 'master'
Matthias Clasen [Sat, 30 May 2020 15:51:21 +0000 (15:51 +0000)]
Merge branch 'matthiasc/for-master' into 'master'

Some listview preparations

See merge request GNOME/gtk!1988

5 years agoFix inconsistencies in our pango deps
Matthias Clasen [Sat, 30 May 2020 15:13:55 +0000 (11:13 -0400)]
Fix inconsistencies in our pango deps

We were applying the pango version requirements inconsistently,
leading to different pango variables being taking from system
pango vs the subproject at times. Thankfully, meson detects
this and complains, so we can fix it.

5 years agoMerge branch 'fix-gesture-leak' into 'master'
Matthias Clasen [Sat, 30 May 2020 15:12:05 +0000 (15:12 +0000)]
Merge branch 'fix-gesture-leak' into 'master'

gesture: Don't leak target widgets

Closes #2801

See merge request GNOME/gtk!1986

5 years agowidget: Add gtk_widget_get_size()
Benjamin Otte [Sat, 19 Oct 2019 03:15:15 +0000 (05:15 +0200)]
widget: Add gtk_widget_get_size()

A little bit of convenience.

5 years agowayland: Remove function declaration for nonexisting function
Benjamin Otte [Wed, 6 Feb 2019 10:55:33 +0000 (11:55 +0100)]
wayland: Remove function declaration for nonexisting function